#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <errno.h>

#include "sans.h"
#include "garbagecollector.h"
#include "runtime.h"

sdata bltn_car(sdata ob) {
  if (ob.tag == tcons) {
    return heap_ref(ob.data.value);
  }
  else {
    log_err("runtime/bltn_car: not a pair\n");
  }
}

sdata bltn_cdr(sdata ob) {
  if (ob.tag == tcons) {
    return heap_ref(ob.data.value + 1);
  }
  else {
    log_err("runtime/bltn_cdr: not a pair\n");
  }
}

sdata bltn_cons(sdata car, sdata cdr) {
  return cons(car, cdr);
}

void bltn_set_car(sdata ob, sdata x) {
  if (ob.tag == tcons) {
    heap_set(ob.data.value, x);
  }
  else {
    log_err("runtime/bltn_set_car: not a pair\n");
  }
}

void bltn_set_cdr(sdata ob, sdata x) {
  if (ob.tag == tcons) {
    heap_set(ob.data.value + 1, x);
  }
  else {
    log_err("runtime/bltn_set_cdr: not a pair\n");
  }
}
